const { app, BrowserWindow, Menu } = require('electron');
const contextMenu = require('electron-context-menu'); // 引入上下文菜单模块

// 定义上下文菜单配置项（v3.x版本专用）
// 关键修复：v3.x版本必须使用menuLabels而非labels来定义标签文本
const contextMenuConfig = {
    // 基础功能开关
    showCopyImage: true,        // 启用"复制图片"功能
    showSaveImage: true,        // 启用"保存图片"功能
    showSaveImageAs: true,      // 启用"图片另存为"功能
    showInspectElement: true,   // 启用"检查元素"功能（开发调试用）
    showSearchWithGoogle: true, // 启用"用谷歌搜索"功能

    // 自定义菜单文本标签
    labels: {
        cut:'剪切',
        paste:'粘贴',
        copy: '复制',               // 复制文本
        copyImage: '复制图片',       // 复制图片
        saveImage: '保存图片',       // 保存图片
        saveImageAs: '图片另存为',   // 图片另存为
        inspect: '检查元素',         // 开发者工具
        searchWithGoogle: '用谷歌搜索' // 搜索功能
    }
};

// 应用主窗口上下文菜单配置
contextMenu(contextMenuConfig);

// 保持对主窗口的全局引用
// 原因：防止JavaScript垃圾回收机制自动回收窗口对象
let mainWindow;

/**
 * 创建应用主窗口
 */
function createWindow() {
    // 创建浏览器窗口实例
    mainWindow = new BrowserWindow({
        width: 1024,               // 窗口初始宽度
        height: 768,               // 窗口初始高度
        webPreferences: {
            nodeIntegration: true,      // 允许渲染进程使用Node.js API
            contextIsolation: false,    // 禁用上下文隔离（简化开发）
            webviewTag: true            // 启用webview标签支持
        }
    });

    // 隐藏应用菜单栏（窗口顶部的菜单）
    Menu.setApplicationMenu(null);

    // 加载应用主页面
    mainWindow.loadFile('src/index.html');

    // 开发环境可开启默认开发者工具
    // mainWindow.webContents.openDevTools();

    // 窗口关闭时清理引用
    mainWindow.on('closed', () => {
        mainWindow = null; // 释放窗口对象引用
    });
}

// 当Electron应用初始化完成后创建主窗口
app.on('ready', createWindow);

// 当所有窗口都关闭时退出应用（macOS特殊处理）
// 原因：macOS应用在所有窗口关闭后通常仍驻留在dock中
app.on('window-all-closed', () => {
    if (process.platform !== 'darwin') { // darwin代表macOS系统
        app.quit(); // 非macOS系统关闭所有窗口后退出应用
    }
});

// macOS系统下点击dock图标时重建窗口
app.on('activate', () => {
    if (mainWindow === null) { // 如果主窗口引用为空（已关闭）
        createWindow(); // 重新创建主窗口
    }
});

// 配置新窗口创建行为
app.on('web-contents-created', (event, contents) => {
    // 处理新窗口打开请求
    contents.setWindowOpenHandler((details) => {
        return {
            action: 'allow', // 允许打开新窗口
            overrideBrowserWindowOptions: { // 新窗口配置
                width: 1024,
                height: 768,
                webPreferences: {
                    webviewTag: true,
                    nodeIntegration: true,
                    contextIsolation: false
                }
            }
        };
    });

    // 为新窗口应用上下文菜单配置
    // 关键修复：新窗口需显式传入完整配置以确保标签生效
    contextMenu({
        ...contextMenuConfig, // 复用主窗口配置
        window: contents      // 指定为当前新窗口的webContents
    });
});
